
var svg = d3.select("svg"),
    width = +svg.attr("width"),
    height = +svg.attr("height");

var color = d3.scaleOrdinal(d3.schemeCategory20);

var simulation = d3.forceSimulation()
    // .force("link",d3.forceLink().distance(10).strength(0.5))
    .force("link", d3.forceLink().id(function(d) { return d.id; }))
    .force("charge", d3.forceManyBody())
    .force("center", d3.forceCenter(width / 2, height / 2))
    //  .force("x", d3.forceX())
    // .force("y", d3.forceY());


function update(){
  // var graphs = null;
  d3.json("miserables.json", function(error, graph) {
  if (error) throw error;
  // graphs = graph
  // check(graph);
  // console.log(graph)

  if (graph.length == 0){
    return null;
  }

  var links = svg.append("g")
      .attr("class", "links")
      .selectAll("line")
      .data(graph.links);

  var link = links.enter().append("line")
      .attr("stroke-width", function(d) { return Math.sqrt(d.value); })
      .attr("id",function(d){
        return d.source + '-' + d.target ;
      });

  links.exit().remove();

  var nodes = svg.append("g")
      .attr("class", "nodes")
    .selectAll("circle")
    .data(graph.nodes);

  var node = nodes.enter().append("circle")
      .attr("r", function(d){
        return 5 ;
      })
      // .attr("class",function(d){
      //   return d.id;
      // })
      .attr("id", function(d){
        // console.log(d.id);
        return d.id;
      })
      .attr("fill", function(d) { return color(d.group); })
      .call(d3.drag()
          .on("start", dragstarted)
          .on("drag", dragged)
          .on("end", dragended));
  nodes
    .append("title")
    .text(function(d) { return d.id; });

  nodes.exit().remove();

  imgs = []
  graph.nodes.forEach(function(d){
    if(d.group == 1){
      imgs.push(d);
        // console.log(d);
    }
  });
  
  var images = svg
    .selectAll("image")
    .data(imgs)
    .enter()
    .append("image")
          // .attr("x",)
          // .attr("y",200)
    .attr("width",20)
    .attr("height",20)
    .attr("xlink:href","x.png")
          // .attr("class","img-circle")
          
  

  
  simulation.force("link").links(graph.links);
  simulation.nodes(graph.nodes).on("tick", ticked);
  
  function ticked() {
    link
        .attr("x1", function(d) { return d.source.x; })
        .attr("y1", function(d) { return d.source.y; })
        .attr("x2", function(d) { return d.target.x; })
        .attr("y2", function(d) { return d.target.y; });
    node
        .attr("cx", function(d) { return d.x; })
        .attr("cy", function(d) { return d.y; });
    images
        .attr("x", function(d) { return d.x; })
        .attr("y", function(d) { return d.y; });
  }

    // function check(s){
    //   _nodes = s.nodes;
    //   _links = s.links;
    //   _nodes.forEach(function(d,i){
    //     if (d3.select("#" + d.id).empty()) {
    //       // console.log(d,i);
    //       graph.nodes.pop(d);
    //     }
    //   })
    //   _links.forEach(function(d){
    //     if (d3.select("#" + d.source + "-" + d.target).empty()) {
    //       // console.log(d);
    //       graph.links.pop(d);
    //     }  
    //   })
    // }


  });

  


}


function dragstarted(d) {
  if (!d3.event.active) simulation.alphaTarget(0.3).restart();
  d.fx = d.x;
  d.fy = d.y;
}

function dragged(d) {
  d.fx = d3.event.x;
  d.fy = d3.event.y;
}

function dragended(d) {
  // if (!d3.event.active) simulation.alphaTarget(0);
  d.fx = d.event.x;
  d.fy = d.event.y;
}

setInterval(function(){
  update()
  },3000)
